<?php

class Doctrine_Model_ProcesosAutomaticos {
    
    public function getEntityManager() {
        if (Zend_Registry::isRegistered('em')) {
            return Zend_Registry::get('em');
        }
        return null;
    }
    
    public static function generarBackupDB($siempre) {
        $backupDao = new Doctrine_Model_BackupDao();
        $hoy = new DateTime();
        $backupsDelDia = $backupDao->obtenerPorFecha($hoy->format('Y-m-d'));
        if (count($backupsDelDia) == 0 || $siempre) {

            $rootPath = "../backups/";
            $destination = $rootPath . "mysql-" . date("Y.m.d");

            mkdir($destination);

            //   $db = $self->getEntityManager();
            $config = new Zend_Config_Ini('../application/configs/application.ini', 'production');
            $arr = $config->resources->db->params;
            $config = $arr->toArray();

            $file = APPLICATION_PATH . '\..\backupsDb\backup' . time() . '.sql';

            $aa = "mysqldump --opt -u {$config['username']} -p{$config['password']} -h {$config['host']} {$config['dbname']} > $file ";

            system("mysqldump --opt -u {$config['username']}  -h {$config['host']} {$config['dbname']}   > $file ");

            $connection = ftp_connect('ftp.qo000332.ferozo.com');

            $login = ftp_login($connection, 'backupdb@agilcredphone.com.ar', 'Backupdb2013');

//        if (!$connection || !$login) {
//            die('Connection attempt failed!');
//        }

            $upload = ftp_put($connection, ' backup' . time() . '.sql', $file, FTP_BINARY);

//        if (!$upload) {
//            echo 'FTP upload failed!';
//        }

            ftp_close($connection);

            $backup = new Doctrine_Model_Entities_Backup();
            $backup->setNombre($file);
            $backup->setFecha($hoy);
            $backupDao->guardar($backup);
        }
    }

    public static function verficarPromesasPendientes($usuario = null) {
        $promesasDao = new Doctrine_Model_PromesasDao();
        $promesasPendientes = $promesasDao->obtenerPendientesDeHoy($usuario->getSucursal()->getId());
        foreach ($promesasPendientes as $p) {
            $p->setPendiente(0);

            if (!$promesasDao->guardar($p)) {
                echo "problemas";
                exit;
            }
        }
    }

    public static function verficarPromesasParaMora($usuario = null) {
        set_time_limit(0);
        
        $creditosDao = new Doctrine_Model_CreditoDao();
        $promesasDao = new Doctrine_Model_PromesasDao();
        $usuarioDao = new Doctrine_Model_UsuarioDoctrineDao();

        //$creditosEnMora = $creditosDao->obtenerTodosActivos();
        $creditosEnMora = $creditosDao->obtenerTodosActivosPorSucursal($usuario->getSucursal()->getId());
        foreach ($creditosEnMora as $credito) {
            
            if (!$credito->estoyAlDia() && $credito->cantidadDeDiasDeMoraOriginal() > 2) {
                $cliente = $credito->getCliente();
                $apellido = $cliente->getApellido();
                $usuario = $usuarioDao->obtenerPorId($credito->getUsuario()->getId());
                $ultimaPromesaPorFechaPromesa = $promesasDao->obtenerUltimaPromesaPorFechaPromesa($credito->getId());
                $ultimaPromesaPorVerifLaboral = $promesasDao->obtenerUltimaPromesaPorFechaVerifLaboral($credito->getId());
                $ultimaPromesaCreada = $ultimaPromesaPorFechaPromesa[0];
                $ultimaPromesaCreadaConVerifLaboral = $ultimaPromesaPorVerifLaboral[0];
                $hoy = new DateTime();
                $puedoCrear = true;
                if ($ultimaPromesaCreada && $ultimaPromesaCreada->getFechaPromesa()) {
                    $ultimaPromesaCreada->getFechaPromesa()->add(new DateInterval('P2D'));

                    if ($ultimaPromesaCreada->getFechaPromesa()->format('Y-m-d') > $hoy->format('Y-m-d')) {
                        $puedoCrear = false;
                    }
                }

                if ($ultimaPromesaCreadaConVerifLaboral && $ultimaPromesaCreadaConVerifLaboral->getFechaVerificacionLaboral()) {
                    $ultimaPromesaCreadaConVerifLaboral->getFechaVerificacionLaboral()->add(new DateInterval('P2D'));
                    if ($ultimaPromesaCreadaConVerifLaboral->getFechaVerificacionLaboral()->format('Y-m-d') > $hoy->format('Y-m-d')) {
                        $puedoCrear = false;
                    }
                }

                if ($puedoCrear) {
                    $promesa = new Doctrine_Model_Entities_Promesas();
                    $promesa->setPersona($credito->getCliente());
                    $fecha = new DateTime();
                    $promesa->setFechaPromesa($fecha);
                    $promesa->setGeneradoPorMora(1);
                    $promesa->setFecha($fecha);
                    $promesa->setCredito_id($credito->getId());
                    $promesa->setComentario("GENERADO POR MORA");
                    $promesa->setUsuario($usuario);
                    $promesasDao->guardar($promesa);
                }
            }
        }
    }

    public static function promesasDeUsuarios() {
        $creditosDao = new Doctrine_Model_CreditoDao();
        $promesasDao = new Doctrine_Model_PromesasDao();

        $creditos = $creditosDao->obtenerTodos();

        $credito = new Doctrine_Model_Entities_Credito();
        foreach ($creditos as $credito) {
            $usuario_id = $credito->getUsuario()->getId();
            $promesas = $credito->getCliente()->getPromesas();

            $promesa = new Doctrine_Model_Entities_Promesas();
            foreach ($promesas as $promesa) {
                if ($promesa->getUsuario()->getId() == 15) {
                    $promesa->setUsuario($credito->getUsuario());
                    if (!$promesasDao->guardar($promesa)) {
                        echo "Promesa: " . $promesa->getId() . "<br/>";
                    }
                }
            }
        }
    }

    public static function alertaDePromesas($usuario = null) {
        $promesasDao = new Doctrine_Model_PromesasDao();
        $creditoDao = new Doctrine_Model_CreditoDao();
        $referenciasDao = new Doctrine_Model_ReferenciasDoctrineDao();
        
        $promesasDao->eliminarTodos($usuario->getSucursal()->getId());
        $promesas = $promesasDao->obtenerUltimasPromesaAutogeneradaPorMoraSinRenovar($usuario->getSucursal()->getId());
        
        $i = 0;
        foreach ($promesas as $promesa) {
            $credito = $creditoDao->obtenerPorId($promesa->getCredito_id());
            $promesasDelCredito = $creditoDao->obtenerPromesas($credito->getId());
            if (!$promesa->tengoPromesasPosteriores($promesasDelCredito) && !$credito->estoyAlDia()) {
                $i++;
                $credito = $creditoDao->obtenerPorId($promesa->getCredito_id());

                $alertaDePromesa = new Doctrine_Model_Entities_AlertaDePromesas();
                $alertaDePromesa->setCliente_id($credito->getCliente()->getId());
                $alertaDePromesa->setNombreCliente($credito->getCliente()->getApellido() . ", " . $credito->getCliente()->getNombres());
                $alertaDePromesa->setComentario("GENERADO POR MORA");

                $alertaDePromesa->setFecha($promesa->getFecha());
                $alertaDePromesa->setFechaPromesa($promesa->getFechaPromesa());
                if ($promesa->getFechaVerificacionLaboral()) {
                    $alertaDePromesa->setFechaVerificacionLaboral($promesa->getFechaVerificacionLaboral());
                }
                $alertaDePromesa->setSucursal_id($promesa->getUsuario()->getSucursal()->getId());
                $alertaDePromesa->setUsuario_id($promesa->getUsuario()->getId());
                $alertaDePromesa->setCredito_id($promesa->getCredito_id());
                $referenciasDao->guardar($alertaDePromesa);
            }
        }
        
    }

}
